package com.awccis.admin.dao;

import com.awccis.admin.model.merchant.MerchantBean;
import com.awccis.admin.model.pay.MerchantNeedPayBean;
import com.awccis.admin.model.pay.MerchantPaDetailInfo;
import com.awccis.admin.model.sorder.ServiceOrderBean;
import com.awccis.admin.model.sorder.ServiceOrderToMerchantBean;
import com.awccis.admin.model.sorder.ServiceTypeBean;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author: txp
 * @date: 2018/5/30 on 下午3:38
 * @since: 1.0
 * @description:
 */
@Repository
public interface AdminServiceOrderDao {

    /**
     * 添加商户信息
     *
     * @param merchantBean merchantInfo
     * @return 影响的行数
     */
    Integer insertMerchantInfo(MerchantBean merchantBean);

    /**
     * 更新商户信息
     *
     * @param merchantBean merchantInfo
     * @return 影响的行数
     */
    Integer updateMerchantInfo(MerchantBean merchantBean);

    /**
     * 删除指定商户
     *
     * @param merchantId merchantID
     * @return 影响行数
     */
    Integer deleteMerchantInfo(Integer merchantId);

    /**
     * 查询所有商户信息
     *
     * @return list
     */
    List<MerchantBean> selectAllMerchantInfo();

    /**
     * 根据不同类型查询商户信息
     *
     * @param serviceType 服务类型
     * @return list
     */
    List<MerchantBean> selectMerchantInfoByType(String serviceType);

    /**
     * 根据ID查询商户信息
     *
     * @param merchantId 商户ID
     * @return 商户信息
     */
    MerchantBean selectMerchantInfoById(Integer merchantId);

    /**
     * 添加service类型
     *
     * @param serviceTypeBean serviceTypeBean
     * @return 影响的行数
     */
    Integer insertServiceType(ServiceTypeBean serviceTypeBean);

    /**
     * 获取所有service类型
     *
     * @return service列表
     */
    List<ServiceTypeBean> selectAllServiceType();

    /**
     * 根据不同ID更改service类型
     *
     * @param serviceTypeBean serviceTypeBean
     * @return 影响的行数
     */
    Integer updateServiceTypeById(ServiceTypeBean serviceTypeBean);

    /**
     * 根据不同的ID删除service类型
     *
     * @param serviceId serviceID
     * @return 影响的行数
     */
    Integer deleteServiceTypeById(Integer serviceId);

    /**
     * 添加预约订单信息
     *
     * @param serviceOrderBean serviceOrderBean
     * @return 影响行数
     */
    Integer insertServiceOrder(ServiceOrderBean serviceOrderBean);

    /**
     * 通过ID更改指定预约单信息
     *
     * @param serviceOrderBean serviceOrderBean
     * @return 影响行数
     */
    Integer updateServiceOrderById(ServiceOrderBean serviceOrderBean);

    /**
     * 更改预约订单的完成状态
     *
     * @param serviceOrderId serviceOrder
     * @return 影响行数
     */
    Integer updateServiceStatusFinishById(Integer serviceOrderId);

    /**
     * 更改预约订单无法完成状态
     *
     * @param serviceOrderId serviceOrder
     * @return 影响的行数
     */
    Integer updateServiceStatusImpossible(Integer serviceOrderId);

    /**
     * 获取所有预约订单信息
     *
     * @return 订单列表
     */
    List<ServiceOrderBean> selectAllServiceOrder();

    /**
     * 根据不同的ID删除预约订单
     *
     * @param serviceOrderId serviceOrderId
     * @return 影响的行数
     */
    Integer deleteServiceOrderById(Integer serviceOrderId);

    /**
     * 根据ID获取serviceOrderId的详细信息
     * @param statusId 订单状态
     * @param serviceOrderId serviceOrderID
     * @return serviceOrderBean
     */
    ServiceOrderBean selectServiceOrderInfoById(@Param("statusId") int statusId,@Param("serviceOrderId") int serviceOrderId);

    /**
     * 根据不同状态和服务类型查询服务订单
     *
     * @param statusId    状态 -1 无法完成 1 未受理 2 处理中 3 已完成
     * @param serviceType 服务类型
     * @return list
     */
    List<ServiceOrderBean> selectServiceOrderByType(@Param("statusId") int statusId, @Param("serviceType") String serviceType);

    /**
     * 查找可需要付费的司机
     *
     * @return list
     */
    List<MerchantPaDetailInfo> selectMerchantNeedPay();

    /**
     * 查询此商户一周内的订单的简单信息
     * @param merchantId 商户ID
     * @return list
     */
    List<ServiceOrderToMerchantBean> selectMerchantSimpleOrderInWeek(Integer merchantId);

    /**
     * 插入本周需要缴费的商户
     * (若传入的list为空，则SQL执行的只有前半句，后面拼接部分不会执行，会出现提示''语法错误)
     * @param list 缴费信息
     * @return 影响行数
     */
    Integer insertMerchantPay(List<MerchantNeedPayBean> list);

    /**
     * 更改商户缴费记录
     * @param mpayId 缴费记录表ID
     * @return 影响行数
     */
    Integer updateMerchantPayStatus(Integer mpayId);

    /**
     * 查询需要缴费的商户信息
     * @param payWeek 当前周数
     * @return list
     */
    List<MerchantPaDetailInfo> selectMerchantPay(String payWeek);

    /**
     * 查询本周记录的需要缴费的商户数量
     * @param payWeeks 周数
     * @return 返回值
     */
    Integer selectPayRecordCounts(String payWeeks);
}
